/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#pragma once

/// Omen Headers
#include "OmenConfig.h"
#include "IOmenObject.h"
#include "OmenMath.h"
#include "IOmenTexture.h"

/// STL Headers
#include <string>

namespace Omen
{
    class OMEN_API IMaterial : public Omen::IObject
    {
    public:
        virtual std::wstring    name() const = 0;
        virtual std::wstring&   name() = 0;

        virtual Omen::Vector4d  ambientColor() const = 0;
        virtual Omen::Vector4d& ambientColor() = 0;
        
        virtual Omen::Vector4d  diffuseColor() const = 0;
        virtual Omen::Vector4d& diffuseColor() = 0;

        virtual Omen::Vector4d  specularColor() const = 0;
        virtual Omen::Vector4d& specularColor() = 0;

        virtual Omen::Float     shininess() const = 0;
        virtual Omen::Float&    shininess() = 0;

        virtual std::wstring    textureFilename() const = 0;
        virtual std::wstring&   textureFilename() = 0;

        // Texture maps
        virtual unsigned int    numTextures() const = 0;
        virtual std::unique_ptr<Omen::ITexture>& texture( unsigned int iTexture ) = 0;
        virtual void setTexture( unsigned int iTexture, std::unique_ptr<Omen::ITexture> texture ) = 0;
        virtual void addTexture( std::unique_ptr<Omen::ITexture> texture ) = 0;

        virtual bool operator ==( const std::wstring ) const = 0;
    protected:
    private:
    };
}